package com.changgou.service.impl;

import com.changgou.dao.BrandMapper;
import com.changgou.goods.pojo.Brand;
import com.changgou.service.BrandService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * @auther LiZiBa
 * @date 2020/7/17 23:22
 * @description:
 **/

@Service
public class BrandServiceImpl implements BrandService {

    @Autowired
    private BrandMapper brandMapper;


    /**
     * 分页 + 条件搜索
     * @param brand :搜索条件
     * @param page:当前页
     * @param size:每页查询数量
     * @return
     */
    @Override
    public PageInfo<Brand> findPage(Brand brand, Integer page, Integer size) {

        // 分页
        PageHelper.startPage(page, size);

        // 条件搜索数据
        Example example = createExample(brand);
        List<Brand> brands = brandMapper.selectByExample(example);

        // 封装PageInfo<Brand>
        return new PageInfo<Brand>(brands);
    }

    /**
     * 分页查询
     * @param page:当前页
     * @param size:每页查询数量
     * @return
     */
    @Override
    public PageInfo<Brand> findPage(Integer page, Integer size) {

        /**
         * 分页实现，注意只能查询集合
         * 1、当前页
         * 2、每页显示数量
         */
        PageHelper.startPage(page, size);
        // 集合查询
        List<Brand> brands = brandMapper.selectAll();

        // 封装分页查询 PageInfo / List<T> list -> page -> this.list;
        return new PageInfo<Brand>(brands);
    }

    /**
     * 多条件查询
     * @param brand
     * @return
     */
    @Override
    public List<Brand> findList(Brand brand) {

        Example example = createExample(brand);

        return brandMapper.selectByExample(example);
    }




    /**
     * 删除brand
     * @param id
     */
    @Override
    public void delete(Integer id) {

        // 删除brand -> 使用通用mapper.deleteByPrimaryKey
        brandMapper.deleteByPrimaryKey(id);
    }

    /**
     * 修改brand
     * @param brand
     */
    @Override
    public void update(Brand brand) {

        // 修改brand -> 使用通用mapper.updateByPrimaryKeySelective 忽略空值
        brandMapper.updateByPrimaryKeySelective(brand);
    }

    /**
     * 增加brand
     * @param brand
     */
    @Override
    public void add(Brand brand) {

        // 注意insertSelective插入会忽略空值使用更加经济合理
        brandMapper.insertSelective(brand);
    }

    /**
     * 根据ID查询品牌
     * @param id
     * @return
     */
    @Override
    public Brand findById(Integer id) {

        // 根据ID查询 -> 通过通用mapper.selectByPrimaryKey(Object o) 根据主键查询
        return brandMapper.selectByPrimaryKey(id);
    }

    /***
     * 查询所有
     * @return
     */
    @Override
    public List<Brand> findAll() {

        // 查询所有 -> 通用Mapper.selectAll();
        return brandMapper.selectAll();
    }



    /**
     * 条件Example构建
     */
    public Example createExample(Brand brand){
        // 自定义条件搜索对象
        Example example = new Example(Brand.class);
        Example.Criteria criteria = example.createCriteria();

        if(null != brand) {

            /**
             * brand.name 不为空，则根据name模糊搜索
             * 1、属性名称
             * 2、占位参数，搜索条件
             */
            if(!StringUtils.isEmpty(brand.getName())) {
                // andLike /  like '%A%'
                criteria.andLike("name", "%" + brand.getName() + "%");
            }

            // 首字母不为空，brand.letter 不为空，则根据letter匹配搜索
            if(!StringUtils.isEmpty(brand.getLetter())) {
                //  andEqualTo / '='
                criteria.andEqualTo("letter", brand.getLetter());
            }

            // 图片地址不为空
            if(!StringUtils.isEmpty(brand.getImage())) {
                criteria.andLike("image","%"+brand.getImage()+"%");
            }

            // 排序
            if(!StringUtils.isEmpty(String.valueOf(brand.getSeq()))) {
                criteria.andEqualTo("seq",brand.getSeq());
            }
        }

        return example;
    }


}
